package com.zht.aspect;

import com.zht.result.AjaxResult;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

/**
 * 自定义测试切面类
 *
 * @author zhaoht
 * @date 2024/5/31
 */

@Component  //配置管理
@Aspect //开启AOP
@Slf4j  //日志注解
public class ZhtTestAspect {

    /**
     * 切入点
     */
    @Pointcut(value = "@annotation(com.zht.annotation.ZhtTestAnnotation)")
    public void pointCut(){
    }


    /**
     * 后置成功处理器
     * 在返回通知中若要获取目标对象方法的返回值
     * 只需要通过@AfterReturning注解的returning属性
     * 就可以将通知方法的某个参数指定接受目标对象方法的返回值的参数
     *
     * @param out       切入点方法返回值
     */
    @AfterReturning(value = "pointCut()",returning = "out")
    public void afters(String out){
        //打印
        System.out.println("切面类: 自定义注解执行,return内容: " + out);
    }

    @Before(value = "pointCut()")
    public void before(){
        //打印
        System.out.println("切面类: 自定义注解执行,在方法执行前执行");
    }

}
